library(readr)
library(tibble)
dataset <- read_csv("data/Miel.concentraciones.en.microgramos.por.gramo.csv")
## Parsed with column specification:
## cols(
## .default = col_character(),
## Li = col_double(),
## Na = col_double(),
## Mg = col_double(),
## Al = col_double(),
## Ca = col_double(),
## Ti = col_double(),
## V = col_double(),
## Cr = col_double(),
## Mn = col_double(),
## Fe = col_double(),
## Co = col_double(),
## Ni = col_double(),
## Cu = col_double(),
## Zn = col_double(),
## As = col_double(),
## Se = col_double(),
## Rb = col_double(),
## Sr = col_double(),
## Mo = col_double(),
## Pd = col_double()
## # ... with 7 more columns
## )
## See spec(...) for full column specifications.
# View(dataset) #<-- descomentar para ver dataset en Rstudio
Quitar columnas vacías
vacias <- 29:ncol(dataset)
dataset <- dataset[-vacias]
Cuántas variables y sus nombres
ncol(dataset)
## [1] 28
colnames(dataset)
## [1] "Zona geográfica" "Li" "Na"
## [4] "Mg" "Al" "Ca"
## [7] "Ti" "V" "Cr"
## [10] "Mn" "Fe" "Co"
## [13] "Ni" "Cu" "Zn"
## [16] "As" "Se" "Rb"
## [19] "Sr" "Mo" "Pd"
## [22] "Ag" "Cd" "Sn"
## [25] "Sb" "Hg" "207 Pb"
## [28] "208 Pb"
Cuántos ejemplos tenemos de cada zona
table(dataset[1])
##
## Noreste Sur Valle de Uco
## 42 12 100
dataset$`Zona geográfica` <- as.factor(dataset$`Zona geográfica`)
Vamos a realizar algunas gráficas descriptivas
library(caret)
## Loading required package: lattice
## Loading required package: ggplot2
library(ggplot2)
featurePlot(x=dataset[-1], y=dataset$`Zona geográfica`, "box")
featurePlot(x=dataset[-1], y=dataset$`Zona geográfica`, "strip", jitter = TRUE)
featurePlot(x=dataset[,2:6], y=dataset$`Zona geográfica`, "pairs", auto.key=list(columns=3))
featurePlot(x=dataset[,2:6], y=dataset$`Zona geográfica`, "ellipse", auto.key=list(columns=3))
# featurePlot(x=dataset[,20:29], y=dataset$`Zona geográfica`, "pairs", auto.key=list(columns=3))
# featurePlot(x=dataset[,7:14], y=dataset$`Zona geográfica`, "ellipse", auto.key=list(columns=3))
agregar columna etiqueta label para indicar si es o no de Valle de Uco para futura clasificación binaria
vDeUco <- "Valle de Uco"
add_column(dataset,label=0)
## # A tibble: 154 x 29
## `Zona geográfic… Li Na Mg Al Ca Ti V Cr
## <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Valle de Uco 9.95e-2 5.23 26.5 35.4 23.4 0.0930 5.48e-3 3.15e-2
## 2 Valle de Uco 1.00e-4 1.40 77.4 1.71 59.6 0.0541 6.20e-3 1.00e-4
## 3 Valle de Uco 6.86e-2 1.13 80.8 3.54 43.9 0.0246 1.00e-4 5.17e-2
## 4 Valle de Uco 1.82e-1 2.78 11.6 2.84 22.7 0.112 8.78e-3 1.00e-4
## 5 Valle de Uco 7.98e-2 1.19 10.3 2.26 11.9 0.0674 1.74e-3 2.41e-2
## 6 Valle de Uco 6.10e-2 3.70 46.5 1.83 32.7 0.0367 6.53e-5 4.62e-2
## 7 Valle de Uco 3.29e-2 1.64 65.6 2.16 46.3 0.0912 7.19e-3 6.06e-3
## 8 Valle de Uco 6.03e-2 1.70 39.2 5.40 33.2 0.122 4.55e-3 1.12e-2
## 9 Valle de Uco 1.00e-4 3.93 54.7 2.84 44.2 0.0890 1.08e-2 1.00e-4
## 10 Valle de Uco 2.40e-1 1.14 9.23 3.62 18.7 0.0614 1.44e-3 1.40e-2
## # ... with 144 more rows, and 20 more variables: Mn <dbl>, Fe <dbl>,
## # Co <dbl>, Ni <dbl>, Cu <dbl>, Zn <dbl>, As <dbl>, Se <dbl>, Rb <dbl>,
## # Sr <dbl>, Mo <dbl>, Pd <dbl>, Ag <dbl>, Cd <dbl>, Sn <dbl>, Sb <dbl>,
## # Hg <dbl>, `207 Pb` <dbl>, `208 Pb` <dbl>, label <dbl>
dataset[dataset$`Zona geográfica` == vDeUco,"label"] <- 1
dataset[dataset$`Zona geográfica` != vDeUco,"label"] <- -1
featurePlot(x=dataset[-1], y=as.factor(dataset$label), "box")
#featurePlot(x=dataset[-1], y=as.factor(dataset$label), "strip", jitter = TRUE)
featurePlot(x=dataset[,2:5], y=as.factor(dataset$label), "pairs", auto.key=list(columns=2))
Correlaciones (lineales) entre las variables
library(corrplot)
## corrplot 0.84 loaded
M <- cor(dataset[-1])
corrplot(M, method = "ellipse")
corrplot(M, method = "number")
Vamos a normalizar las variables y luego realizar los feature plots, que parecieran estar afectados por outliers
quitar <- c(1,ncol(dataset))
data <- dataset[-quitar]
media <- apply(data, 2, mean)
std <- apply(data, 2, sd)
data <- scale(data, center = media, scale = std)
data <- as.data.frame(cbind(data,label=dataset$label))
feature selection para estimar variables más importantes (variable importance? feature selectior package?)
featurePlot(x=data, y=as.factor(dataset$label), "box")
featurePlot(x=data, y=as.factor(dataset$label), "strip", jitter = TRUE)
TODO como mejorar el plot porque son muchas variables
featurePlot(x=data[,c(1,2,3,4)], y=as.factor(dataset$label), "pairs", auto.key=list(columns=2))
featurePlot(x=data[-ncol(data)], y=as.factor(dataset$label), "pairs", auto.key=list(columns=2))
Li y Na parecieran ser variables candidatas de mayor peso en el modelo clasificador. TODO task: no prioritario, pero habría que ver opciones en la librería o programar algo para visualizar varias variables a la vez.